#!/usr/bin/env python3
"""
MinIO 文件上传脚本 - 创建桶并上传5个txt文档
"""
from minio import Minio
from minio.error import S3Error
from io import BytesIO
from datetime import datetime

# 颜色代码
class Colors:
    GREEN = '\033[92m'
    RED = '\033[91m'
    BLUE = '\033[94m'
    YELLOW = '\033[93m'
    RESET = '\033[0m'


def upload_files():
    """创建test-bucket桶并上传5个txt文档"""
    print(f"\n{Colors.BLUE}📁 MinIO 文件上传{Colors.RESET}")
    print("-" * 40)
    
    bucket_name = "test-bucket"
    
    try:
        # 连接 MinIO
        client = Minio(
            "localhost:9000",
            access_key="minioadmin",
            secret_key="minioadmin123", 
            secure=False
        )
        print(f"{Colors.GREEN}✓ 连接成功{Colors.RESET}")
        
        # 创建存储桶
        if not client.bucket_exists(bucket_name):
            client.make_bucket(bucket_name)
            print(f"{Colors.GREEN}✓ 创建桶:{Colors.RESET} {bucket_name}")
        else:
            print(f"{Colors.YELLOW}! 桶已存在:{Colors.RESET} {bucket_name}")
        
        # 准备5个txt文档内容
        files = {
            "document1.txt": f"这是第一个文档\n创建时间: {datetime.now()}\n内容: 测试数据1",
            "document2.txt": f"这是第二个文档\n创建时间: {datetime.now()}\n内容: 测试数据2", 
            "document3.txt": f"这是第三个文档\n创建时间: {datetime.now()}\n内容: 测试数据3",
            "document4.txt": f"这是第四个文档\n创建时间: {datetime.now()}\n内容: 测试数据4",
            "document5.txt": f"这是第五个文档\n创建时间: {datetime.now()}\n内容: 测试数据5"
        }
        
        # 上传文件
        for filename, content in files.items():
            data = BytesIO(content.encode('utf-8'))
            client.put_object(
                bucket_name,
                filename,
                data,
                len(content.encode('utf-8')),
                content_type="text/plain"
            )
            print(f"{Colors.GREEN}✓ 上传:{Colors.RESET} {filename}")
        
        # 验证上传结果
        objects = list(client.list_objects(bucket_name))
        print(f"\n{Colors.BLUE}📋 桶内文件列表:{Colors.RESET}")
        for obj in objects:
            print(f"  • {obj.object_name} ({obj.size} 字节)")
        
        print(f"\n{Colors.YELLOW}🎉 成功上传 {len(files)} 个文件到 {bucket_name}!{Colors.RESET}")
        return True
        
    except S3Error as e:
        print(f"{Colors.RED}❌ S3错误: {e.code} - {e.message}{Colors.RESET}")
        return False
    except Exception as e:
        print(f"{Colors.RED}❌ 上传失败: {e}{Colors.RESET}")
        print("请确保 MinIO 服务正在运行 (docker-compose up -d)")
        return False


if __name__ == "__main__":
    upload_files()